查看原文
其他

Paddle Serving v0.9.0 重磅发布多机多卡分布式推理框架

飞桨PaddlePaddle 百度AI 2022-12-19

自2018年以来,BERT、ERNIE、GPT 等大规模预训练模型快速发展,在 NLP、多模态、生物医学领域取得了巨大突破。超大预训练模型的参数规模从十亿、百亿扩展到千亿、万亿,模型大小突破单卡显存,甚至单机多卡显存限制。大模型具备标注数据更少、模型效果更优、创造能力更强和灵活定制场景等优势。因此,如何将超大预训练模型在生产环境中全量部署,并获得完整的模型效果,成为了业界关注的焦点。

Paddle Serving 作为飞桨(PaddlePaddle)开源的服务化部署框架,为了更好解决超大预训练模型在生产环境中全量部署,发布 v0.9.0 版本——多机多卡分布式推理框架。支持自然语言理解、对话、跨模态生成等大不同种类的大模型结构,实现高速推理,让大模型真正落成应用。

旸谷社区——百度新发布基于文心大模型的创意社区,是 Paddle Serving 落地的一个典型应用。旸谷社区采用 Paddle Serving 分布式推理框架部署百亿、千亿级参数超大模型,在该社区成功部署上线了百度自研的4个大模型(智能作画『人人都是艺术家』、智能对话『AI 聊吧』、智能创作『歌词生成』和故事生成『AI 造梦师』),大模型产业级应用已启动。

左右滑动扫码体验


「鹏城-百度·文心」(代号 ERNIE 3.0 Titan),于2021年12月由百度联合鹏城实验室打造,作为全球首个知识增强千亿大模型,参数规模达到2600亿,是当时全球最大中文的单体模型,同样也采用 Paddle Serving 多机多卡分布式推理框架,实现其服务化部署。

 设计方案 
Paddle Serving 框架支持 RESTful、gRPC、bRPC 等多种协议,接入多种高性能推理引擎,适配多种计算芯片、Docker 以及 Kubernetes 云端环境,提供基于 DAG 流水线设计,提供同步和异步2种处理框架,包括线程并发、自动批量、请求缓存等高性能并发处理能力。通过以上完善的基础功能、高性能推理能力,Paddle Serving 为实现大模型分布式推理奠定了稳固的基础。

解决单卡显存瓶颈

针对大模型占用显存量超过 GPU 单卡显存上限,甚至超过单机多卡显存上限的问题,借鉴分布式训练中模型并行、流水线并行技术,将大模型结构切分成多个子图,每个子图所占显存不超过单卡显存上限,将 Tensor 计算和不同层计算切分到多个 GPU 卡上,并插入集合通讯算子实现子图间参数同步。因此,大模型推理计算演绎成基于子图拓扑的多机多卡分布式推理。


Paddle Serving 遵循分布式推理技术原理扩展多机多卡分布式能力,设计了第一个版本。如下图所示,由1个 Master 节点与多个 Worker 节点构成。Master 节点接收用户请求,支持 RESTful、gRPC、bRPC 协议,基于 Serving 的有向无环图构建循环控制、子图拓扑管理,拓扑结构中共有4类算子,包括 Request、Response、Loop 和 PP(流水线并行)算子。各算子之间采用内存引用方式交互数据,PP 之间实现流水线并行计算,PP 内实现模型并行计算,PP 算子与 Worker使用 RPC 交互,同机 Worker 之间采用集合通讯库 NCCL 同步数据。


该方案由 Serving 框架控制子图拓扑结构和数据流转,可支持复杂的拓扑,PP 之间可实现流水线并行处理。缺点是性能较差,每一轮 Loop 中 Worker 间模型并行计算结果要从显存拷贝到内存,返回给 Master,再由 PP 0 下发给 PP 1 的所有 Worker,多次 RPC 打包、解包操作,非常耗时。

下移子图拓扑到推理引擎层
针对上述方案的性能问题,将子图拓扑结构和计算控制逻辑从 Serving 下移到推理引擎层,每一轮 Loop 计算结果保存在 GPU 显存中缓存,无需拷贝 Host 内存。PP 节点之间插入 Send、Recv 算子,实现高性能数据通讯。新方案在服务启动时,以配置文件方式将子图拓扑结构传入到推理引擎中,每个节点有完整的子图拓扑,当前节点在拓扑结构中位置、相邻节点的 IP 和 Port,并与相邻节点完成握手。Master 节点接收用户请求,通过 RemoteOp 将数据发送到第0层子图的 Worker Serving 节点上,所有的计算和数据同步控制全部在推理引擎中完成,最终的计算结果由第0层子图的 Worker Serving 节点返回到 Master Serving 节点,返回给用户。

通过以上的改进,新框架推理的模型规模越大性能提升越明显,与原方案相比,推理千亿参数 ERNIE 模型耗时下降70%。

提升服务并发吞吐
通常,大模型分布式推理优化技术包括动态批量、低精度 fp16、TensorRT 加速、fused 优化和显存 Cache 等,Paddle Serving 不仅采用了这些优化方法,同时也做了改进升级。例如动态批量技术在多个服务化推理框架中均有实现,原理是将多个请求 shape 维度相同但数值不同的 Tensor 自动 Padding 补0对齐,合并成一个大矩阵批量推理,充分利用 GPU Kernel 多 Block、多线程特性,提升计算吞吐。
Paddle Serving 动态批量技术的不同之处有2点。
第一,实现复杂的二维变长 Tensor 自动批量,如 Transformer 模型结构输入参数有二维变长 Tensor。
第二,提出了2种动态批量 Padding 合并 Batch 的策略(满足任意1个策略即可合并数据),解决完全 Padding 导致计算性能的退化的问题。
  • 策略1:评估数据绝对长度的差值,当两批数据长度的绝对值差的字节数小于1024字节时(可配置),自动 Padding 补齐后合并 Batch。
  • 策略2:评估数据的相似度,以两组数据 Shape 各个维度的乘积作为相似度,当相似度大于50%(可配置),自动 Padding 补齐后合并 Batch。


上述策略数值是经过多种模型测试得到,针对不同的业务场景和请求数据,最佳配置也不相同,在大流量高并发场景效果会更明显。在 ERNIE 3.0 模型上有25%的吞吐提升。


异常处理
大模型部署面临的异常问题有3个:硬件故障、网络异常、服务异常等。整体异常处理预案如下:
 硬件故障 
  • 单卡故障:服务实例迁移,其他无故障卡可复用。
  • 单机故障:服务实例迁移

 网络异常 

  • 单机网络异常:服务实例迁移
  • Master 与 Worker 之间链接异常:采用短链接,半同步以及异常检测。

 服务异常 

  • 健康状态检查:定时端口检测&预测结果检测
  • 服务夯住/挂掉:服务重启&supervise 拉起

由于一组服务内 Master Serving 与 Worker Serving 之间进行通讯交互,服务内异常处理与服务间异常处理有差异的。Master Serving 与 Worker Serving 之间数据通讯采用 bRPC 半同步机制,等待多个异步操作返回。由 Master Serving 发起调用并等待多个 RPC 都结束后再醒来,从而实现广播且同步等待的效果。由于网络或处理异常等原因, 部分 Worker Serving 节点返回值存在失败的情况,由于每层 MP 节点的计算结果全部相同,因此,并非全部请求失败时,我们认为请求推理计算是成功的,将第0层 MP 节点的计算结果返回。对于单卡和单机多卡的故障低成本迁移方案将是下一阶段重点工作。

Benchmark
  • 测试环境

8*A100-SXM4-40GB, 160 core Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz, 10000Gbps network

  • 模型参数规模:百亿


  • 测试结论

单机4卡 A100 部署百亿生成模型的单请求预测延时是201毫秒,batch=32时,预测耗时是 330ms,单机4卡 A100 部署百亿分类模型的单请求预测延时是 17.7ms,不仅满足在线服务的延时要求,与其他分布式推理框架相比具有优势,已具备大规模产业级应用技术条件。

总结
Paddle Serving 多机多卡分布式推理方案有良好的通用性和扩展性,能广泛支持不同种类的模型结构,实现高速推理,目前已支撑了如自然语言理解、对话、跨模态生成等大模型的实时在线应用。使用该方案实现大规模服务化部署,让大模型真正落成应用。
 部署方案 
伴随中国人工智能走进产业规模化应用的「深水区」,百度在大模型上搭建了适配场景需求的体系,提供全流程支持应用落地的工具和部署方案,让大模型技术赋能产业,让 AI 助推工业大生产。
线上部署
在 2022WAVE SUMMIT 2022 深度学习开发者峰会期间,文心大模型旸谷社区的大模型应用采用 Paddle Serving 分布式推理框架部署上线,为大模型大规模应用奠定了基础。Paddle Serving 多机多卡分布式推理框架的整体部署方案设计复杂,多地多中心、多机多卡组合、多级负载均衡、流量调度和异常故障处理等。整体部署思路如下图所示,与常规服务化部署的差异在于构建分布式部署的结构化思路。

首先,大模型服务是以 Group 为单位,每个 Group 由多个 Node 组成,Node 是经过虚拟化的部署容器,每个 Node 部署 Master 进程和 Worker 进程。其次,每个 Group 中仅有一个 Node 部署 Master 进程,负责接收外部请求流量。可根据模型规模、切分方法、单卡显存和单机的显存数量等因素,决定每个 Group上Node 的数量,如单机多卡、2机多卡、4机多卡以及8机多卡等。最后,Paddle Serving 提供了多机自适应配置生成与启动脚本,可根据全局配置信息;在相同 Group 的不同 Node 自动生成部署配置和启动脚本,简化人工设置,提高了部署效率。
通过以上方案实现多机多卡大模型部署。
部署案例
接下来,以百亿参数规模知识问答任务为例,为大家提供一个完整的部署案例,详细讲解 Paddle Serving 分布式推理的部署方案,详情请点击阅读原文。
⭐ 点击阅读原文获得 ⭐ERNIE 3.0百亿参数模型部署案例

知识问答任务示例


更多阅读

走进官网
关注以下官网,可获得更多技术内容。
  • Paddle Serving官网:
    https://github.com/PaddlePaddle/Serving
  • 飞桨文心大模型官网:
    https://wenxin.baidu.com/

加入社群
如果您想同更多开发者或其他用户沟通,欢迎扫码加入 Paddle Serving 技术交流群,与来自各大企业、高校的服务化部署开发者畅谈技术。

扫描下方二维码完成问卷
按引导即可入群


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存